/**
 * 完全错误屏蔽工具
 * 彻底屏蔽所有浏览器扩展错误
 */

// 完全重写console方法
const originalConsole = {
  log: console.log,
  warn: console.warn,
  error: console.error,
  info: console.info,
  debug: console.debug
};

// 扩展错误关键词列表
const EXTENSION_ERROR_PATTERNS = [
  'ODHFrontend',
  'chrome-extension://lppjdajkacanlmpbbcdkccjkdbpllajb',
  'api_setFrontendOptions',
  'Cannot read properties of null (reading \'enabled\')',
  'chrome-extension://',
  'Error in event handler',
  'at ODHFrontend.',
  'at ODHFrontend.onMessage',
  'frontend.js',
  'chrome-extension://'
];

// 判断是否为扩展错误
function isExtensionError(message: any): boolean {
  if (!message) return false;
  const messageStr = String(message);
  return EXTENSION_ERROR_PATTERNS.some(pattern => messageStr.includes(pattern));
}

// 重写console.error - 完全屏蔽扩展错误
console.error = function(...args: any[]) {
  const message = args.join(' ');
  if (isExtensionError(message)) {
    return; // 完全静默
  }
  originalConsole.error.apply(console, args);
};

// 重写console.warn - 屏蔽扩展警告
console.warn = function(...args: any[]) {
  const message = args.join(' ');
  if (isExtensionError(message)) {
    return; // 完全静默
  }
  originalConsole.warn.apply(console, args);
};

// 重写console.log - 屏蔽扩展日志
console.log = function(...args: any[]) {
  const message = args.join(' ');
  if (isExtensionError(message)) {
    return; // 完全静默
  }
  originalConsole.log.apply(console, args);
};

// 全局错误事件处理
window.addEventListener('error', (event) => {
  if (isExtensionError(event.message)) {
    event.preventDefault();
    event.stopPropagation();
    return false;
  }
});

// Promise拒绝处理
window.addEventListener('unhandledrejection', (event) => {
  const message = event.reason?.message || event.reason;
  if (isExtensionError(message)) {
    event.preventDefault();
    return false;
  }
});

// 清理现有控制台内容
setTimeout(() => {
  if (typeof console.clear === 'function') {
    console.clear();
    originalConsole.log('%c🛡️ 扩展错误已完全屏蔽', 'color: #4CAF50; font-weight: bold; font-size: 16px;');
  }
}, 1000);

export default {
  isExtensionError,
  EXTENSION_ERROR_PATTERNS
};
